type TreePath struct {
    path []int
    res [][]int
}

func (t *TreePath) allPath(root *TreeNode) [][]int {
    t.dfs(root)
    return t.res
}

func (t *TreePath) dfs(node *TreeNode) {
    if node == nil {
        return
    }

    // 递的时候：将当前节点值加入到路径
    t.path = append(t.path, node.Val)

    if node.Left == nil && node.Right == nil {
        t.res = append(t.res, append([]int(nil), t.path...))
    }

    t.dfs(node.Left)
    t.dfs(node.Right)

    // 回溯
    // 归的时候：将当前节点从当前路径中删除
    t.path = t.path[:len(t.path)-1]
}